package com.dataStructure.Map;

import java.util.List;
import java.util.Map;

public class MyHashMap<K,V> extends MyBetterMap<K,V> implements Map<K,V> {

    private static final double FACTOR = 1.0;
    public MyHashMap(int k) {
        super(k);
    }

    @Override
    public V put(K key, V value) {
        V oldValue = super.put(key, value);
        //如果键值对总数大于横列表的元素数, 就相等有子映射可存放的最大条目数
        if (size() > FACTOR * maps.size()) {
            rehash();
        }
        return oldValue;
    }

    /**
     * 哈希扩容  我可以认为当总元素的数量大于 FATOR * 子映射的数量时， （也就是说平均2每个子映射的数量最多FActor）就要将子映射的数量扩容2倍
     * 重新将元素分配到子映射中
     */
    private void rehash() {
        List<MyLinerMap<K, V>> maps1 = this.maps;
        super.makeBetterMap(maps1.size() * 2);
        for (MyLinerMap<K, V> e : maps1) {
            List<Entry<K, V>> entryList = e.getEntries();
            for (Entry<K, V> e2 : entryList) {
               put(e2.getKey(),e2.getValue());

            }
        }


    }
}
